package com.yfuxdeer.youchat.utils;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.*;


public class CodeUtil {
    //短信服务的参数
    private static final String secretId = "AKID0pOhkW1FCtJSKwGJ5csrZ0B5i4AzXopZ";
    private static final String secretKey = "UhdJjSv97oEOHtEI7fvue9NK1SbT4QWK";
    private static final String endPoint = "sms.tencentcloudapi.com";
    private static final String region = "ap-guangzhou";
    private static final String appID = "1400517293";
    private static final String smsSign = "deerelk个人公众号";
    private static final String templateID = "1430027";
    private static final String period = "2";

    //邮箱服务的参数
private static final String hostName = "smtp.email.ncu.edu.cn";
private static final String username = "yfuxzpskbr@email.ncu.edu.cn";
private static final String password = "Wjh001025";
private static final String subject = "YouChat用户注册验证码";
private static final String content = "您的验证码为: [ %s ] ,请在2分钟内完成验证";

    public static void sendCheckCodeToPhone(String mobile, String code) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 实例化一个认证对象，入参需要传入腾讯云账户secretId，secretKey,此处还需注意密钥对的保密
                    // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
                    Credential cred = new Credential(secretId, secretKey);
                    // 实例化一个http选项，可选的，没有特殊需求可以跳过
                    HttpProfile httpProfile = new HttpProfile();
                    httpProfile.setEndpoint(endPoint);
                    // 实例化一个client选项，可选的，没有特殊需求可以跳过
                    ClientProfile clientProfile = new ClientProfile();
                    clientProfile.setHttpProfile(httpProfile);
                    // 实例化要请求产品的client对象,clientProfile是可选的
                    SmsClient client = new SmsClient(cred, region, clientProfile);
                    // 实例化一个请求对象,每个接口都会对应一个request对象
                    SendSmsRequest req = new SendSmsRequest();
                    String[] phoneNumberSet1 = {mobile};
                    req.setPhoneNumberSet(phoneNumberSet1);

                    req.setSmsSdkAppId(appID);
                    req.setSignName(smsSign);
                    req.setTemplateId(templateID);

                    String[] templateParamSet1 = {code, period};
                    req.setTemplateParamSet(templateParamSet1);

                    // 返回的resp是一个SendSmsResponse的实例，与请求对象对应
                    SendSmsResponse resp = client.SendSms(req);
                    // 输出json格式的字符串回包
                    System.out.println(SendSmsResponse.toJsonString(resp));
                } catch (TencentCloudSDKException e) {
                    System.out.println(e.toString());
                }
            }
        }).start();
    }

    public static void sendCheckCodeToEmail(String emailAddress, String code) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                SimpleEmail email = new SimpleEmail();
                email.setHostName(hostName);//设置邮箱服务器
                email.setAuthentication(username, password);//设置用户名和密码
                try {
                    email.addTo(emailAddress);//收件人
                    email.setFrom(username);//发件人
                    email.setSubject(subject);//邮件主题
                    email.setMsg(String.format(content, code));//邮件内容
                    email.send();//发送邮件
                } catch (EmailException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

}
